//
//  ScriptService.swift
//  redbox
//
//  Created by ma c on 2025/9/11.
//

import WebKit

class ScriptService {
    static let shared = ScriptService()
    
    private init() {}
    
    /// 执行自动领取脚本
    func executeAutoClaimScript(in webView: WKWebView, completion: ((Bool) -> Void)? = nil) {
        let script = """
        // 自动领取脚本 - 多策略实现
        function autoClaim() {
            console.log('开始执行自动领取脚本');
            
            // 策略1: 文本匹配 - 查找包含特定关键词的按钮
            const textKeywords = ['领取', '获取', '立即领取', '马上领取', '点击领取', 'claim', 'get', 'reward'];
            const allElements = document.querySelectorAll('button, a, div, span');
            
            for (let element of allElements) {
                const text = (element.textContent || element.innerText || '').trim().toLowerCase();
                const className = (element.className || '').toLowerCase();
                
                // 检查文本内容
                for (let keyword of textKeywords) {
                    if (text.includes(keyword.toLowerCase())) {
                        console.log('找到匹配文本的按钮:', text);
                        element.click();
                        return true;
                    }
                }
                
                // 检查类名
                for (let keyword of textKeywords) {
                    if (className.includes(keyword.toLowerCase())) {
                        console.log('找到匹配类名的按钮:', className);
                        element.click();
                        return true;
                    }
                }
            }
            
            // 策略2: 特定选择器匹配
            const selectors = [
                // 通用按钮选择器
                '.btn-claim',
                '.get-btn',
                '.reward-btn',
                '.claim-button',
                '.btn-get',
                
                // DNF特定选择器
                '.btn_reward',
                '.btn_get',
                '.btn_claim',
                
                // 包含onclick事件的选择器
                '[onclick*="claim"]',
                '[onclick*="get"]',
                '[onclick*="reward"]',
                '[onclick*="领取"]',
                '[onclick*="获取"]'
            ];
            
            for (let selector of selectors) {
                try {
                    const elements = document.querySelectorAll(selector);
                    if (elements.length > 0) {
                        console.log('找到选择器匹配的元素:', selector);
                        elements[0].click();
                        return true;
                    }
                } catch (error) {
                    console.log('选择器执行错误:', selector, error);
                }
            }
            
            // 策略3: 图片按钮识别（针对图形化按钮）
            const imgButtons = document.querySelectorAll('img[src*="claim"], img[src*="get"], img[src*="reward"], img[alt*="领取"], img[alt*="获取"]');
            for (let img of imgButtons) {
                // 找到最近的可点击父元素
                let parent = img.parentElement;
                while (parent && !['BUTTON', 'A', 'DIV'].includes(parent.tagName)) {
                    parent = parent.parentElement;
                }
                
                if (parent && (parent.onclick || parent.tagName === 'BUTTON' || parent.tagName === 'A')) {
                    console.log('找到图片按钮:', img.src);
                    parent.click();
                    return true;
                }
            }
            
            console.log('未找到可领取的按钮');
            return false;
        }
        
        // 执行并返回结果
        const result = autoClaim();
        result;
        """
        
        webView.evaluateJavaScript(script) { result, error in
            if let error = error {
                print("JavaScript执行错误: \(error)")
                completion?(false)
            } else {
                var success = false
                if let resultBool = result as? Bool {
                    success = resultBool
                }
                print("自动领取执行结果: \(success ? "成功" : "失败")")
                completion?(success)
            }
        }
    }
    
    /// 检测登录状态
    func checkLoginStatus(in webView: WKWebView, completion: @escaping (Bool) -> Void) {
        let script = """
        // 检测是否已登录
        function checkLoggedIn() {
            // 检查登录相关元素
            const loginIndicators = [
                'login',
                '登录', 
                'signin',
                'qq登录',
                '一键登录'
            ];
            
            const logoutIndicators = [
                'logout',
                '退出',
                'signout',
                '个人中心',
                '我的'
            ];
            
            const bodyText = document.body.innerText.toLowerCase();
            
            // 如果有退出相关的文本，说明已登录
            for (let indicator of logoutIndicators) {
                if (bodyText.includes(indicator)) {
                    return true;
                }
            }
            
            // 如果有登录相关的文本，说明未登录
            for (let indicator of loginIndicators) {
                if (bodyText.includes(indicator)) {
                    return false;
                }
            }
            
            // 默认认为已登录（避免频繁弹出登录提示）
            return true;
        }
        
        checkLoggedIn();
        """
        
        webView.evaluateJavaScript(script) { result, error in
            if let isLoggedIn = result as? Bool {
                completion(isLoggedIn)
            } else {
                // 如果执行失败，默认认为已登录
                completion(true)
            }
        }
    }
    
    /// 执行QQ一键登录脚本
    func executeQQLoginScript(in webView: WKWebView, completion: @escaping (Bool) -> Void) {
        let script = """
        // QQ一键登录脚本
        function qqLogin() {
            const qqSelectors = [
                '.qq-login',
                '.qq_login',
                '[onclick*="qq"]',
                '[onclick*="QQ"]',
                'img[src*="qq"]',
                'img[src*="QQ"]'
            ];
            
            for (let selector of qqSelectors) {
                const elements = document.querySelectorAll(selector);
                if (elements.length > 0) {
                    console.log('找到QQ登录按钮:', selector);
                    elements[0].click();
                    return true;
                }
            }
            
            // 查找包含"QQ"或"qq"文本的按钮
            const allButtons = document.querySelectorAll('button, a');
            for (let btn of allButtons) {
                const text = (btn.textContent || '').toLowerCase();
                if (text.includes('qq') || text.includes('一键登录')) {
                    console.log('找到QQ登录文本按钮:', text);
                    btn.click();
                    return true;
                }
            }
            
            console.log('未找到QQ登录按钮');
            return false;
        }
        
        qqLogin();
        """
        
        webView.evaluateJavaScript(script) { result, error in
            if let success = result as? Bool {
                completion(success)
            } else {
                completion(false)
            }
        }
    }
}
